home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / doc / lisp-complete.el < prev    next >
Lisp/Scheme  |  1990-02-02  |  1KB  |  56 lines

  1. ;; By Bill Schelter;
  2. ;; Completion on forms in the buffer.   Does either a line or an sexp. 
  3.  
  4.  
  5. (defvar  part-prompt 2)
  6.  
  7. (defun lisp-complete ()
  8.   (interactive )
  9.   (let ((point (point)) new str)
  10.   (save-excursion
  11.     (re-search-backward shell-prompt-pattern nil t)
  12.     (goto-char (match-end 0))
  13.     (cond ((= (char-after (- (point) 1)) ?  )
  14.        (setq part-prompt 2))
  15.       (t (setq part-prompt 1)))
  16.     (setq str (buffer-substring (- (point) part-prompt) point))
  17.     (setq new (lisp-complete1 str point))
  18.     )
  19.   (cond (new
  20.      (delete-region (- point (length str) (- part-prompt)) point)
  21.      (goto-char (+  part-prompt point))
  22.      (insert new)))))
  23.  
  24.  
  25. (defun lisp-complete1 (str point )
  26.   (let ((not-yet t) at end found)
  27.     (while not-yet
  28.       (cond ((search-backward str nil t)
  29.          (setq at (point))
  30.          (setq end (save-excursion (end-of-line) (point)))
  31.          (goto-char point)
  32.          (setq not-yet
  33.            (not (y-or-n-p   (buffer-substring at end))))
  34.          (cond (not-yet     (goto-char at))
  35.            (t (setq at (+  part-prompt at))
  36.               (setq found
  37.             (save-excursion (buffer-substring
  38.               at
  39.               (progn (goto-char at)
  40.                  (max (save-excursion (end-of-line) (point))
  41.                   (save-excursion (forward-sexp 1)(point)))
  42.                  )))))))
  43.         (t (message "Not found") (setq not-yet nil)
  44.            )
  45.         ))
  46.  
  47.         found
  48.     ))
  49.  
  50.      
  51.   
  52.       
  53.       
  54.     
  55.  
  56.